﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuanLyNganHangDe.DAL.Models;

/**
 * HISTORY
 * 
 * 20140605-0510
 * # Sắp xếp theo thứ tự ABC của tên đơn vị phụ trách
 */

namespace QuanLyNganHangDe.BLL
{
    partial class BizDonViPhuTrach
    {
        public static List<DonViPhuTrach> GetListDonViPhuTrach()
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                return context.DonViPhuTrachDbSet.OrderBy(e => e.TenDonVi).ToList();
            }
        }

        public static List<DonViGrid> GetListDonViPhuTrachChoLuoi()
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                var ls = from e in context.DonViPhuTrachDbSet
                         orderby e.TenDonVi
                         select new DonViGrid
                         {
                             MaKhoa = e.MaDonVi,
                             TenKhoa = e.TenDonVi,
                             TongSoHP = e.HocPhanCollection.Count
                         };
                return ls.ToList();
            }
        }

        public static void AddNew(string maDonVi, string tenDonVi)
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                var count = context.DonViPhuTrachDbSet.Count(e => e.MaDonVi == maDonVi || e.TenDonVi == tenDonVi);
                if (count != 0)
                    throw new Exception("Đã có đơn vị phụ trách với mã đơn vị hoặc tên đơn vị này");
                try
                {
                    var x = new DonViPhuTrach { MaDonVi = maDonVi, TenDonVi = tenDonVi };
                    context.DonViPhuTrachDbSet.Add(x);
                    context.SaveChanges();
                }
                catch (Exception exc)
                {
                    throw new Exception("Lỗi xử lý cơ sở dữ liệu " + exc.Message, exc.InnerException);
                }
            }
        }

        /// <summary>
        /// Đổi tên loại hình đào tạo
        /// </summary>
        /// <param name="maLoaiHinh"></param>
        /// <param name="tenLoaiHinh"></param>
        public static void Update(string maDonVi, string tenDonVi)
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                var x = context.DonViPhuTrachDbSet.Where(e => e.MaDonVi == maDonVi).FirstOrDefault();
                if (x == null)
                    throw new Exception("Không tìm thấy đơn vị phụ trách");
                var count = context.DonViPhuTrachDbSet.Count(e => e.MaDonVi != maDonVi && e.TenDonVi == tenDonVi);
                if (count != 0)
                    throw new Exception("Đã có tên đơn vị này hệ thống");
                try
                {
                    x.TenDonVi = tenDonVi;
                    context.SaveChanges();
                }
                catch (Exception exc)
                {
                    throw new Exception("Lỗi xử lý cơ sở dữ liệu " + exc.Message, exc.InnerException);
                }
            }
        }

        public static bool Delete(DonViPhuTrach x)
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                try
                {
                    var oX = context.DonViPhuTrachDbSet.Where(e => e.MaDonVi == x.MaDonVi).FirstOrDefault();
                    if (oX == null)
                        throw new Exception("Không tìm thấy loại hình đào tạo");
                    if (oX.HocPhanCollection != null && oX.HocPhanCollection.Count > 0)
                        return false;
                    context.DonViPhuTrachDbSet.Remove(oX);
                    context.SaveChanges();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }
    }
    public class DonViGrid
    {
        public string MaKhoa { get; set; }
        public string TenKhoa { get; set; }
        public int TongSoHP { get; set; }
    }
}
